.| Aufruf in : message_auswerten-1,haupt_dialog-1,
LOCAL a&
coff
IF menu_do%=0
menu_do%=1
SELECT m_eintrag&
CASE ml0& ! SED
about_me
CASE ml1o& TO ml1u& ! Datei
ON m_eintrag&-ml1o&+1 GOSUB dat_lesen,dum,dat_sichern,dat_sichern_als,dum,dat_drucken,dum,pexec,start_shell,dum,wind_cycle,dum,exit
CASE ml2o& TO ml2u& ! Block
ON m_eintrag&-ml2o&+1 GOSUB do_undo,dum,ctrl_b,ctrl_k,ctrl_a,ctrl_h,dum,alt_f,ctrl_t,alt_t,ctrl_c,info_crc,dum,to_blk_anf,to_blk_end
CASE ml3o& TO ml3u& ! Suchen
ON m_eintrag&-ml3o&+1 GOSUB ctrl_f,ctrl_g,alt_q,dum,set_list_offset,address
CASE ml4o& TO ml4u& ! Hilfe/Optionen
ON m_eintrag&-ml4o&+1 GOSUB infos,einstellungen,dum,opt_text,opt_fehler
'
DEFAULT
SELECT ml%
CASE 1 ! DATEI
ON m_eintrag&-m1xo&+1 GOSUB file_open,file_write,dum,file_close,dum,datei_info,dum,file_dump,file_compare,dum,datei_copy,datei_del,dum,datei_suchen,disc_quick,dum,datei_cut,datei_concat,dum
CASE 2 ! DISK
a&=m_eintrag&-m2xo&+1
SELECT a&
CASE 1 TO 12
ON a& GOSUB sektor_read,sektor_write,dum,cl_up,cl_down,dum,sektor_compare,disc_clear,disc_check,dum,disc_info
CASE 13 TO 24
ON a&-12 GOSUB fat_bearbeiten,dum,fat_cluster,dum,fat_read1,fat_read2,fat_xor,dum,fat_optimum,dum,fat_test,fat_graph
CASE 26 TO
ON a&-25 GOSUB dir_fldren,dir_sort,dum,file_repair,dum,dir_files,dum,disc_load,disc_save,dum,dir_root,dir_secsearch
ENDSELECT
CASE 3 ! RAM
ON m_eintrag&-m3xo&+1 GOSUB ram_adress_read,ram_adress_write,dum,ram_test,ram_cookie,dum,ram_load,ram_save,dum,disass,disass_konv,dum,prg_load,clr_prg_load
CASE 4 ! PLATTE
a&=m_eintrag&-m4xo&+1
IF a&<17
ON a& GOSUB hard_read,hard_write,dum,hard_root,hard_search,dum,hard_mode_sense,hard_mode_select,dum,hard_statistik,hard_prot,hard_command,dum,hard_copy,dum,hard_ship
ELSE
ON a&-17 GOSUB hard_format,hdx_bad,hdx_set_bad,dum,hard_part,hard_zero,dum,hard_install,hard_noboot,dum,hard_save,hard_restore
ENDIF
CASE 5 ! FLOPPY
a&=m_eintrag&-m5xo&+1
IF a&<14
ON a& GOSUB fdc_trkread,fdc_trkwrite,dum,fdc_readadress,dum,fdc_anal,fdc_diskanal,anal_buf,dum,fdc_trkinfo,dum,fdc_secread,fdc_secwrite
ELSE
ON a&-14 GOSUB fdc_speed,fdc_protect,fdc_head,dum,fdc_steprate,dum,fdc_null,fdc_trackconfig,dum,convert
ENDIF
ENDSELECT
ENDSELECT
CLR menu_do%
ENDIF
~MENU_TNORMAL(menu_pointer%,m_titel&,1)
RETURN
PROCEDURE menu_1 ! DATEI
.| Glob. Var.: menu_adr%,m.enu1%,ml%,mod1&
.| Ruft auf : switch_menu,set_mod_button,file_on
.| Aufruf in : base_look-1,set_kleine_buttons-1,haupt_dialog-2,
switch_menu(menu_adr%,m.enu1%)
ml%=1
set_mod_button(mod1&)
file_on
RETURN
PROCEDURE menu_2 ! DISK
.| Glob. Var.: menu_adr%,m.enu2%,ml%,mod2&
.| Ruft auf : switch_menu,set_mod_button,disc_on
.| Aufruf in : rsc_init-1,set_kleine_buttons-1,haupt_dialog-2,
switch_menu(menu_adr%,m.enu2%)
ml%=2
set_mod_button(mod2&)
disc_on
RETURN
PROCEDURE menu_3 ! RAM
.| Glob. Var.: menu_adr%,m.enu3%,ml%,mod3&
.| Ruft auf : switch_menu,set_mod_button,ram_on
.| Aufruf in : set_kleine_buttons-1,haupt_dialog-2,
switch_menu(menu_adr%,m.enu3%)
ml%=3
set_mod_button(mod3&)
ram_on
RETURN
PROCEDURE menu_4 ! PLATTE
.| Glob. Var.: menu_adr%,m.enu4%,ml%,mod4&
.| Ruft auf : media_all,switch_menu,set_mod_button,hard_on
.| Aufruf in : set_kleine_buttons-1,haupt_dialog-2,
IF @media_all=0
switch_menu(menu_adr%,m.enu4%)
ml%=4
set_mod_button(mod4&)
hard_on
ENDIF
RETURN
PROCEDURE menu_5 ! FLOPPY
.| Glob. Var.: menu_adr%,m.enu5%,ml%,mod5&
.| Ruft auf : switch_menu,set_mod_button,fdc_on
.| Aufruf in : set_kleine_buttons-1,haupt_dialog-2,
switch_menu(menu_adr%,m.enu5%)
ml%=5
set_mod_button(mod5&)
fdc_on
RETURN
PROCEDURE switch_menu(old_menu%,menu_adr%)
.| Glob. Var.: menu_pointer%
.| Ruft auf : set_menu
.| Aufruf in : menu_1-1,menu_2-1,menu_3-1,menu_4-1,menu_5-1
.| info_kleine_buttons-6,
menu_pointer%=menu_adr%
IF old_menu%>0
~MENU_BAR(old_menu%,0)
ENDIF
~WIND_UPDATE(1)
~MENU_BAR(menu_adr%,1)
~WIND_UPDATE(0)
old_menu%=menu_adr%
set_menu
RETURN
' ----------------------
PROCEDURE menu_init
.| Glob. Var.: mendx4&
.| Felder : men_ienable%()
.| Ruft auf : menu_blkhide
.| Aufruf in : rsc_init-1,
men_ienable%(mendx4&)=0 ! Weiter suchen
menu_blkhide(0)
RETURN
PROCEDURE menu_blkhide(a%)
.| Glob. Var.: i%,mendx&,ml2u&
.| Felder : men_ienable%()
.| Ruft auf : set_menu
.| Aufruf in : set_block-2,menu_init-1,ctrl_h-1,set_stat-4,set_found_block-1,
FOR i%=mendx& TO ml2u& ! BLOCKmarkierung löschen-Drucken...
.| Ruft auf : file_is_open,desktop_weg,v_enter_cur,get_pfad,v_exit_cur
.| desktop_back
.| Aufruf in : menu_mess-1,
LOCAL a%,a$,ret&,com$,drive%
file_is_open
desktop_weg
v_enter_cur(scr_handle%)
DO
drive%=GEMDOS(25) AND 255 ! Aktuelles Laufwerk
get_pfad
PRINT pfad$;" # ";
a$=""
DO
a%=BIOS(2,2) AND 255
EXIT IF a%=13 OR a%=10 OR a%=4 OR a%=26 ! CR, LF, ^D, ^Z
IF a%<32
IF a%=8
IF a$<>""
a$=LEFT$(a$,LEN(a$)-1)
PRINT CHR$(8);" ";CHR$(8);
ENDIF
ELSE
PRINT CHR$(7);
ENDIF
ELSE
IF LEN(a$)<80
a$=a$+CHR$(a%)
PRINT CHR$(a%);
ELSE
PRINT CHR$(7);
ENDIF
ENDIF
LOOP
PRINT
EXIT IF a$="" OR UPPER$(a$)="EXIT"
com$=a$+CHR$(0)
ret&=(C:shell_p%(L:VARPTR(com$))) AND &HFF
VOID XBIOS(21,2)
VOID XBIOS(21,1)
IF ret&>0
IF ret&>&H7F
ret&=ret&-256
ENDIF
OPEN "O",#1,"vid:"
PRINT #1,a$;
CLOSE #1
PRINT ": Fehler "+STR$(ret&)
ENDIF
LOOP
v_exit_cur(scr_handle%)
~FORM_DIAL(3,0,0,0,0,dx%,dy%,dw%,dh%)
desktop_back
RETURN
PROCEDURE about_me
.| Glob. Var.: ver$
.| Ruft auf : alrt,opt_help
.| Aufruf in : menu_mess-1,
LOCAL wwa%
wwa%=@alrt(4,ver$+"|Modifiziert 1995-04-04 von Rainer Seitel @ KA|Der etwas andere Diskmonitor |aus dem SCHEIBENKLEISTER",4,"Kleister|SED|Hilfe|Danke")
SELECT wwa%
CASE 1
~@alrt(1,"Das Buch zum Thema 'Massenspeicher am ST'| - unbedingt lesen - ",1," Aha ")
CASE 2
~@alrt(1,ver$+" ist nicht PD-Software!! ",1," Aha ")
CASE 3
opt_help
ENDSELECT
RETURN
PROCEDURE exit ! Programm verlassen?
.| Glob. Var.: wind%
.| Ruft auf : change,alrt,file_is_open,do_exit,do_cursor_anz,maus_off
.| Aufruf in : menu_mess-1,
change
IF @alrt(2,"Ist für heute wirklich Schluß?",1," Schluß |Nie")=1
.| Aufruf in : boot_sec-1,last_5-1,dir_sort-1,fat_bearbeiten-2,fat_test-1,
LOCAL fat_size2%
'
CLR bpb%
IF @media(drive%)=0
bpb%=BIOS(7,drive%)
IF bpb%>0
bps%=CARD{bpb%}
spc%=CARD{bpb%+2}
bpc%=CARD{bpb%+4}
len_dir%=CARD{bpb%+6}
len_fat%=CARD{bpb%+8}
anf_fat2%=CARD{bpb%+10} ! Beginn der 2. FAT, bei einer FAT deren Beginn
anf_dat%=CARD{bpb%+12}
cpd%=CARD{bpb%+14}
bflag%=CARD{bpb%+16}
spd%=anf_dat%+cpd%*spc%
IF drive%<2
tpd%=CARD{bpb%+18}
sid%=CARD{bpb%+20}
spt%=CARD{bpb%+22} DIV sid%
spd%=spt%*sid%*tpd%
hid%=CARD{bpb%+26}
serie%=CARD{bpb%+28}*256+BYTE{bpb%+30}
ELSE
CLR tpd%,sid%,spt%,hid%,serie%
ENDIF
'
anf_dir%=anf_dat%-len_dir%
IF (bflag% AND 2)<>0 ! Nur eine FAT vorhanden!
anf_fat1%=anf_fat2%
ELSE
anf_fat1%=anf_fat2%-len_fat%
ENDIF
'
fat_size2%=len_fat%*bps%
'
IF fat_size2%>fat_size%
wwa%=@alrt(1,"Größe des FAT-Puffer "+STR$(fat_size%)+" Byte.|Notwendige Größe "+STR$(fat_size2%)+" Byte.|FAT-Puffer auf diese Größe anlegen?",1,"Ja| Nein ")
IF wwa%=1
~MFREE(fatbuf%)
fatbuf%=MALLOC(fat_size2%)
IF fatbuf%=0
~@alrt(3,ver$+"|Kein Speicher für FAT!",1,"Abbruch")